linebot.models.FlexSendMessage
模組,採用 from linebot.models import FlexSendMessage
的引入方式使用 FlexSendMessage
函數,呈現一樣的結果,有差異的地方說明如下:
from linebot.models import FlexSendMessage
的引入方式會報錯,那是因為截圖的4個橘色函數您尚未完整引入。您程式需要改寫為:
from linebot.models import FlexSendMessage
from linebot.models.flex_message import (
BubbleContainer, ImageComponent
)
from linebot.models.actions import URIAction
flex_message = FlexSendMessage(
alt_text='hello',
contents=FlexSendMessage.BubbleContainer(
direction='ltr',
hero=FlexSendMessage.ImageComponent(
url='https://example.com/cafe.jpg',
size='full',
aspect_ratio='20:13',
aspect_mode='cover',
action=actions.URIAction(uri='http://example.com', label='label')
)
)
)
#reply_message的組裝方式與先前範例相同,要token跟message
line_bot_api.reply_message(event.reply_token, flex_message)
linebot.models.FlexSendMessage
相對單純,搞通了就會選擇此種方案較省心:
from linebot.models import FlexSendMessage
flex_message = FlexSendMessage(
alt_text='hello',
contents={ #就把JSON貼過來吧
'type': 'bubble',
'direction': 'ltr',
'hero': {
'type': 'image',
'url': 'https://example.com/cafe.jpg',
'size': 'full',
'aspectRatio': '20:13',
'aspectMode': 'cover',
'action': { 'type': 'uri', 'uri': 'http://example.com', 'label': 'label' }
}
}
)
line_bot_api.reply_message(event.reply_token, flex_message)
handle_message()
函數裡,將先前關鍵字為@k <台股代碼>
的功能改寫,新增以 #k <台股代碼>
作功能新增測試,而貼入 content 變數的 dict 只改寫了範例的 url
及 alt_text
兩個值,其中 alt_text
是指您預覽時出現的提示字:
from linebot.models import FlexSendMessage
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
if event.message.text[:2].upper() == "#K":
input_word = event.message.text.replace(" ","") #合併字串取消空白
stock_name = input_word[2:6] #0050
start_date = input_word[6:] #2020-01-01
content = plot_stcok_k_chart(IMGUR_CLIENT_ID,stock_name,start_date)
flex_message = FlexSendMessage(
alt_text=stock_name, #alt_text
contents={
'type': 'bubble',
'direction': 'ltr',
'hero': {
'type': 'image',
'url': content,
'size': 'full',
'aspectRatio': '20:13',
'aspectMode': 'cover',
'action': { 'type': 'uri', 'uri': content, 'label': 'label' }
}
}
)
line_bot_api.reply_message(event.reply_token, flex_message)
contents
變數。
flex_message = FlexSendMessage(
alt_text=stock_name,
contents={...} #貼進來
)
line_bot_api.reply_message(event.reply_token, flex_message)
URL
、stock_name
、 start_date
等變數應修正至對應至文字、圖片或連結欄位。true / false
要改成大寫開頭 True / False
不然會報錯。LINE 除了本系列介紹的文字、圖片訊息,在互動介面提到的 Flex Message , 還有 Rich Menu 、 QuickReply 、 LIFE 等豐富介面供使用者與聊天服務互動,不再一一介紹,但相信您在閱讀本系列文時已經有一定思路可以查閱相關資源,這也是自學開發的寶貴歷程,我們下篇見。